package com.cctc.rds.scheduler.core.task;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 任务状态：
 * - pending：悬决中，待调度；当任务调度器使用方提交任务实例后以及被重新调度时所处的状态。
 * - cancel：已取消，不再调度；当任务调度器使用方取消任务实例时所处的状态。
 * - scheduling：调度中，待执行；对于已经提交到任务调度器服务端，但未被任务调度器客户端拉取，或未提交任务执行结果时所处的状态。
 * - success：执行成功，终止调度执行；对于已经被任务调度器客户端拉取且已提交任务执行成功结果后所处的状态。
 * - fail：执行失败，重新调度执行；对于已经被任务调度器客户端拉取且已提交任务执行失败结果后所处的状态。
 */
@Getter
@AllArgsConstructor
public enum TaskStatus {
    PENDING("pending"),
    CANCEL("cancel"),
    SCHEDULING("scheduling"),
    SUCCESS("success"),
    FAIL("fail");

    private String status;

    public static TaskStatus getInstance(String status) {
        for (TaskStatus value : TaskStatus.values()) {
            if (status != null && status.equals(value.getStatus())) {
                return value;
            }
        }
        return null;
    }

}
